home *** CD-ROM | disk | FTP | other *** search
/ World of Video / World of Video.iso / gfxprograms / 3dprograms / rayshade-4.0 / rayfiles / rsdefs / objects / rounded.rh < prev    next >
Text File  |  1995-02-13  |  13KB  |  407 lines

  1. /************************************************************************
  2.  *
  3.  *      rounded.rh
  4.  *
  5.  *      This is an #include file for the Rayshade Standard Header
  6.  *      Files.  It defines the "rounded" superprimitives in the package.
  7.  *
  8.  *      Please do not edit this file, or any of the other files in
  9.  *      this package!  Make additions to these in your own separate
  10.  *      file.  If you think you have something that should be added
  11.  *      permanently, please send it to Larry Coffin and/or David
  12.  *      DeBry (email addresses listed below).  If we include it in
  13.  *      the next release, we'll put your name in the contributor's
  14.  *      list.
  15.  *
  16.  *      Contributors (in alphabetical order):
  17.  *          Larry Coffin <lcoffin@clciris.chem.umr.edu>
  18.  *          David DeBry <ddebry@dsd.es.com>
  19.  *          Stuart Warmink <sw@groucho.att.com>
  20.  */
  21.  
  22.  
  23. #ifndef RSHF_ROUNDED
  24. #define RSHF_ROUNDED
  25.  
  26. /*************************************************************************
  27.  *
  28.  *     Box with rounded edges and corners.  x1, y1, z1 and x2, y2, z2
  29.  * are the opposing corners of the box, the coordinates of the first
  30.  * corner must be less that the second corner (ie. x1 < x2, etc.)
  31.  * (the rounded box does not extend outside this defined box).
  32.  * r is the radius of the corners of the box.
  33.  *
  34.  */
  35.  
  36. #define  RSProundedbox(prefix,x1,y1,z1,x2,y2,z2,r)            \
  37. prefix union                                \
  38.     union                                \
  39.     union                                \
  40.         box (x1) ((y1)+(r)) ((z1)+(r))  (x2) ((y2)-(r)) ((z2)-(r))    \
  41.         box ((x1)+(r)) (y1) ((z1)+(r))  ((x2)-(r)) (y2) ((z2)-(r))    \
  42.     end                                \
  43.     box ((x1)+(r)) ((y1)+(r)) (z1)  ((x2)-(r)) ((y2)-(r)) (z2)    \
  44.     end                                    \
  45.     union                                \
  46.     union                                \
  47.         union                            \
  48.         union                            \
  49.             sphere (r) ((x1)+(r)) ((y1)+(r)) ((z1)+(r))        \
  50.             list                        \
  51.             cylinder (r)  ((x1)+(r)) ((y1)+(r)) ((z1)+(r))    \
  52.                       ((x2)-(r)) ((y1)+(r)) ((z1)+(r))    \
  53.             disc (r) ((x1)+(r)) ((y1)+(r)) ((z1)+(r)) -1 0 0\
  54.             disc (r) ((x2)-(r)) ((y1)+(r)) ((z1)+(r))  1 0 0\
  55.             end                            \
  56.         end                            \
  57.         union                            \
  58.             sphere (r) ((x2)-(r)) ((y1)+(r)) ((z1)+(r))        \
  59.             list                        \
  60.             cylinder (r)  ((x2)-(r)) ((y1)+(r)) ((z1)+(r))    \
  61.                       ((x2)-(r)) ((y2)-(r)) ((z1)+(r))    \
  62.             disc (r) ((x2)-(r)) ((y1)+(r)) ((z1)+(r)) 0 -1 0\
  63.             disc (r) ((x2)-(r)) ((y2)-(r)) ((z1)+(r)) 0  1 0\
  64.             end                            \
  65.         end                            \
  66.         end                                \
  67.         union                            \
  68.         union                            \
  69.             sphere (r) ((x2)-(r)) ((y2)-(r)) ((z1)+(r))        \
  70.             list                        \
  71.             cylinder (r)  ((x2)-(r)) ((y2)-(r)) ((z1)+(r))    \
  72.                          ((x1)+(r)) ((y2)-(r)) ((z1)+(r))    \
  73.             disc (r) ((x2)-(r)) ((y2)-(r)) ((z1)+(r))  1 0 0\
  74.             disc (r) ((x1)+(r)) ((y2)-(r)) ((z1)+(r)) -1 0 0\
  75.             end                            \
  76.         end                            \
  77.         union                            \
  78.             sphere (r) ((x1)+(r)) ((y2)-(r)) ((z1)+(r))        \
  79.             list                        \
  80.             cylinder (r)  ((x1)+(r)) ((y2)-(r)) ((z1)+(r))    \
  81.                          ((x1)+(r)) ((y1)+(r)) ((z1)+(r))    \
  82.             disc (r) ((x1)+(r)) ((y2)-(r)) ((z1)+(r)) 0  1 0\
  83.             disc (r) ((x1)+(r)) ((y1)+(r)) ((z1)+(r)) 0 -1 0\
  84.             end                            \
  85.         end                            \
  86.         end                                \
  87.     end                                \
  88.     union                                \
  89.         union                            \
  90.         union                            \
  91.             list                        \
  92.             cylinder (r)  ((x1)+(r)) ((y1)+(r)) ((z1)+(r))    \
  93.                          ((x1)+(r)) ((y1)+(r)) ((z2)-(r))    \
  94.             disc (r) ((x1)+(r)) ((y1)+(r)) ((z1)+(r)) 0 0 -1\
  95.             disc (r) ((x1)+(r)) ((y1)+(r)) ((z2)-(r)) 0 0  1\
  96.             end                            \
  97.             list                        \
  98.             cylinder (r)  ((x2)-(r)) ((y1)+(r)) ((z1)+(r))    \
  99.                          ((x2)-(r)) ((y1)+(r)) ((z2)-(r))    \
  100.             disc (r) ((x2)-(r)) ((y1)+(r)) ((z1)+(r)) 0 0 -1\
  101.             disc (r) ((x2)-(r)) ((y1)+(r)) ((z2)-(r)) 0 0  1\
  102.             end                            \
  103.         end                            \
  104.         union                            \
  105.             list                        \
  106.             cylinder (r)  ((x2)-(r)) ((y2)-(r)) ((z1)+(r))    \
  107.                          ((x2)-(r)) ((y2)-(r)) ((z2)-(r))    \
  108.             disc (r) ((x2)-(r)) ((y2)-(r)) ((z1)+(r)) 0 0 -1\
  109.             disc (r) ((x2)-(r)) ((y2)-(r)) ((z2)-(r)) 0 0  1\
  110.             end                            \
  111.             list                        \
  112.             cylinder (r)  ((x1)+(r)) ((y2)-(r)) ((z1)+(r))    \
  113.                          ((x1)+(r)) ((y2)-(r)) ((z2)-(r))    \
  114.             disc (r) ((x1)+(r)) ((y2)-(r)) ((z1)+(r)) 0 0 -1\
  115.             disc (r) ((x1)+(r)) ((y2)-(r)) ((z2)-(r)) 0 0  1\
  116.             end                            \
  117.         end                            \
  118.         end                                \
  119.         union                            \
  120.         union                            \
  121.             union                        \
  122.             sphere (r) ((x1)+(r)) ((y1)+(r)) ((z2)-(r))    \
  123.             list                        \
  124.                 cylinder (r)  ((x1)+(r)) ((y1)+(r)) ((z2)-(r))\
  125.                           ((x2)-(r)) ((y1)+(r)) ((z2)-(r))\
  126.                 disc (r) ((x1)+(r)) ((y1)+(r)) ((z2)-(r)) -1 0 0\
  127.                 disc (r) ((x2)-(r)) ((y1)+(r)) ((z2)-(r))  1 0 0\
  128.             end                        \
  129.             end                            \
  130.             union                        \
  131.             sphere (r) ((x2)-(r)) ((y1)+(r)) ((z2)-(r))    \
  132.             list                        \
  133.                 cylinder (r)  ((x2)-(r)) ((y1)+(r)) ((z2)-(r))\
  134.                           ((x2)-(r)) ((y2)-(r)) ((z2)-(r))\
  135.                 disc (r) ((x2)-(r)) ((y1)+(r)) ((z2)-(r)) 0 -1 0\
  136.                 disc (r) ((x2)-(r)) ((y2)-(r)) ((z2)-(r)) 0  1 0\
  137.             end                        \
  138.             end                            \
  139.         end                            \
  140.         union                            \
  141.             union                        \
  142.             sphere (r) ((x2)-(r)) ((y2)-(r)) ((z2)-(r))    \
  143.             list                        \
  144.                 cylinder (r)  ((x2)-(r)) ((y2)-(r)) ((z2)-(r))\
  145.                          ((x1)+(r)) ((y2)-(r)) ((z2)-(r))    \
  146.                 disc (r) ((x2)-(r)) ((y2)-(r)) ((z2)-(r))  1 0 0\
  147.                 disc (r) ((x1)+(r)) ((y2)-(r)) ((z2)-(r)) -1 0 0\
  148.             end                        \
  149.             end                            \
  150.             union                        \
  151.             sphere (r) ((x1)+(r)) ((y2)-(r)) ((z2)-(r))    \
  152.             list                        \
  153.                 cylinder (r)  ((x1)+(r)) ((y2)-(r)) ((z2)-(r))\
  154.                     ((x1)+(r)) ((y1)+(r)) ((z2)-(r))\
  155.                 disc (r) ((x1)+(r)) ((y2)-(r)) ((z2)-(r)) 0  1 0\
  156.                 disc (r) ((x1)+(r)) ((y1)+(r)) ((z2)-(r)) 0 -1 0\
  157.             end                        \
  158.             end                            \
  159.         end                            \
  160.         end                                \
  161.     end                                \
  162.     end                                    \
  163. end
  164.  
  165.  
  166. /*************************************************************************
  167.  *
  168.  *     A box frame made up of cylinder for the edges with spheres
  169.  * at the corners.  x1,y1,z1 and x2,y2,z2 are the two opposite box
  170.  * corners (x1 < x2, etc) and r is the radius of the cylinders/spheres.
  171.  * The centers of the cylinders and spheres are aligned on the defined
  172.  * box. (Bounding box is larger than defined box by r on all sides.)
  173.  *
  174.  */
  175.  
  176. #define  RSPboxframe(prefix,x1,y1,z1,x2,y2,z2,r)            \
  177. prefix                                    \
  178.    union                                \
  179.     union                                \
  180.         union                            \
  181.         union                            \
  182.             sphere (r) (x1) (y1) (z1)                \
  183.             list                        \
  184.             cylinder (r)  (x1) (y1) (z1)            \
  185.                       (x2) (y1) (z1)            \
  186.             disc (r) (x1) (y1) (z1) -1 0 0            \
  187.             disc (r) (x2) (y1) (z1)  1 0 0            \
  188.             end                            \
  189.         end                            \
  190.         union                            \
  191.             sphere (r) (x2) (y1) (z1)                \
  192.             list                        \
  193.             cylinder (r)  (x2) (y1) (z1)            \
  194.                       (x2) (y2) (z1)            \
  195.             disc (r) (x2) (y1) (z1) 0 -1 0            \
  196.             disc (r) (x2) (y2) (z1) 0  1 0            \
  197.             end                            \
  198.         end                            \
  199.         end                                \
  200.         union                            \
  201.         union                            \
  202.             sphere (r) (x2) (y2) (z1)                \
  203.             list                        \
  204.             cylinder (r)  (x2) (y2) (z1)            \
  205.                           (x1) (y2) (z1)            \
  206.             disc (r) (x2) (y2) (z1)  1 0 0            \
  207.             disc (r) (x1) (y2) (z1) -1 0 0            \
  208.             end                            \
  209.         end                            \
  210.         union                            \
  211.             sphere (r) (x1) (y2) (z1)                \
  212.             list                        \
  213.             cylinder (r)  (x1) (y2) (z1)            \
  214.                           (x1) (y1) (z1)            \
  215.             disc (r) (x1) (y2) (z1) 0  1 0            \
  216.             disc (r) (x1) (y1) (z1) 0 -1 0            \
  217.             end                            \
  218.         end                            \
  219.         end                                \
  220.     end                                \
  221.     union                                \
  222.         union                            \
  223.         union                            \
  224.             list                        \
  225.             cylinder (r)  (x1) (y1) (z1)            \
  226.                           (x1) (y1) (z2)            \
  227.             disc (r) (x1) (y1) (z1) 0 0 -1            \
  228.             disc (r) (x1) (y1) (z2) 0 0  1            \
  229.             end                            \
  230.             list                        \
  231.             cylinder (r)  (x2) (y1) (z1)            \
  232.                           (x2) (y1) (z2)            \
  233.             disc (r) (x2) (y1) (z1) 0 0 -1            \
  234.             disc (r) (x2) (y1) (z2) 0 0  1            \
  235.             end                            \
  236.         end                            \
  237.         union                            \
  238.             list                        \
  239.             cylinder (r)  (x2) (y2) (z1)            \
  240.                           (x2) (y2) (z2)            \
  241.             disc (r) (x2) (y2) (z1) 0 0 -1            \
  242.             disc (r) (x2) (y2) (z2) 0 0  1            \
  243.             end                            \
  244.             list                        \
  245.             cylinder (r)  (x1) (y2) (z1)            \
  246.                           (x1) (y2) (z2)            \
  247.             disc (r) (x1) (y2) (z1) 0 0 -1            \
  248.             disc (r) (x1) (y2) (z2) 0 0  1            \
  249.             end                            \
  250.         end                            \
  251.         end                                \
  252.         union                            \
  253.         union                            \
  254.             union                        \
  255.             sphere (r) (x1) (y1) (z2)            \
  256.             list                        \
  257.                 cylinder (r)  (x1) (y1) (z2)        \
  258.                           (x2) (y1) (z2)        \
  259.                 disc (r) (x1) (y1) (z2) -1 0 0        \
  260.                 disc (r) (x2) (y1) (z2)  1 0 0        \
  261.             end                        \
  262.             end                            \
  263.             union                        \
  264.             sphere (r) (x2) (y1) (z2)            \
  265.             list                        \
  266.                 cylinder (r)  (x2) (y1) (z2)        \
  267.                           (x2) (y2) (z2)        \
  268.                 disc (r) (x2) (y1) (z2) 0 -1 0        \
  269.                 disc (r) (x2) (y2) (z2) 0  1 0        \
  270.             end                        \
  271.             end                            \
  272.         end                            \
  273.         union                            \
  274.             union                        \
  275.             sphere (r) (x2) (y2) (z2)            \
  276.             list                        \
  277.                 cylinder (r)  (x2) (y2) (z2)        \
  278.                       (x1) (y2) (z2)        \
  279.                 disc (r) (x2) (y2) (z2)  1 0 0        \
  280.                 disc (r) (x1) (y2) (z2) -1 0 0        \
  281.             end                        \
  282.             end                            \
  283.             union                        \
  284.             sphere (r) (x1) (y2) (z2)            \
  285.             list                        \
  286.                 cylinder (r)  (x1) (y2) (z2)        \
  287.                       (x1) (y1) (z2)        \
  288.                 disc (r) (x1) (y2) (z2) 0  1 0        \
  289.                 disc (r) (x1) (y1) (z2) 0 -1 0        \
  290.             end                        \
  291.             end                            \
  292.         end                            \
  293.         end                                \
  294.     end                                \
  295.     end                                    \
  296.  
  297. /*************************************************************************
  298.  *
  299.  *     A cylinder with rounded corners.  r1 is the radius of the
  300.  * cylinder, x1,y1,z1 and x2,y2,z2 are the two ends of the cylinder,
  301.  * and r2 is the radius of the rounded edges. (This object is bounded
  302.  * by the normal cylinder defined by r1 x1,y1,z1 and x2,y2,z2).
  303.  *
  304.  */
  305.  
  306. #define RSPv0001_len(x1,y1,z1,x2,y2,z2)                    \
  307.         (sqrt(((x2)-(x1))^2+((y2)-(y1))^2+((z2)-(z1))^2))
  308. #define RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2)                \
  309.         (((x2)-(x1))*(r2)/ RSPv0001_len(x1,y1,z1,x2,y2,z2))
  310. #define RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2)                \
  311.         (((y2)-(y1))*(r2)/ RSPv0001_len(x1,y1,z1,x2,y2,z2))
  312. #define RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2)                \
  313.         (((z2)-(z1))*(r2)/ RSPv0001_len(x1,y1,z1,x2,y2,z2))
  314.  
  315. #define RSProundedcylinder(prefix,r1,x1,y1,z1,x2,y2,z2,r2)        \
  316. prefix union                                \
  317.     union                                \
  318.     union                                \
  319.         list                            \
  320.         cylinder (r1)                        \
  321.             ((x1)+RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  322.             ((y1)+RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  323.             ((z1)+RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  324.             ((x2)-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  325.             ((y2)-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  326.             ((z2)-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  327.         disc (r1)                        \
  328.             ((x1)+RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  329.             ((y1)+RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  330.             ((z1)+RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  331.             (-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  332.             (-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  333.             (-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  334.         disc (r1)                        \
  335.             ((x2)-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  336.             ((y2)-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  337.             ((z2)-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  338.             (RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))            \
  339.             (RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))            \
  340.             (RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))            \
  341.         end                                \
  342.         list                            \
  343.         cylinder ((r1)-(r2))  (x1) (y1) (z1)  (x2) (y2) (z2)    \
  344.         disc     ((r1)-(r2))  (x1) (y1) (z1)            \
  345.              (-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  346.              (-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  347.              (-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  348.         disc     ((r1)-(r2))  (x2) (y2) (z2)            \
  349.              (RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))        \
  350.              (RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))        \
  351.              (RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))        \
  352.         end                                \
  353.     end                                \
  354.     torus ((r1)-(r2)) (r2)                        \
  355.           ((x1)+RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))            \
  356.           ((y1)+RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))            \
  357.           ((z1)+RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))            \
  358.           (-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))            \
  359.           (-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))            \
  360.           (-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))            \
  361.     end                                    \
  362.     torus ((r1)-(r2)) (r2)                        \
  363.       ((x2)-RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))            \
  364.       ((y2)-RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))             \
  365.       ((z2)-RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))            \
  366.       (RSPv0001_xp(x1,y1,z1,x2,y2,z2,r2))                \
  367.       (RSPv0001_yp(x1,y1,z1,x2,y2,z2,r2))                \
  368.       (RSPv0001_zp(x1,y1,z1,x2,y2,z2,r2))                \
  369. end
  370.  
  371. /*************************************************************************
  372.  *
  373.  *     A disc with rounded edges.  r is the radius of the
  374.  * disc, xp,yp,zp is the center of the disc, xn,yn,zn is the normal
  375.  * for the disc.
  376.  *
  377.  */
  378.  
  379. #define RSPv0002_len(xn,yn,zn) (sqrt((xn)^2 + (yn)^2 + (zn)^2))
  380.  
  381. #define RSProundeddisc(prefix,r,xp,yp,zp,xn,yn,zn,t)            \
  382. prefix union                                \
  383.     list                                \
  384.     cylinder ((r)-(t/2))                        \
  385.         ((xp)+(t/2)*(xn)/ RSPv0002_len(xn,yn,zn))            \
  386.         ((yp)+(t/2)*(yn)/ RSPv0002_len(xn,yn,zn))            \
  387.         ((zp)+(t/2)*(zn)/ RSPv0002_len(xn,yn,zn))            \
  388.         ((xp)-(t/2)*(xn)/ RSPv0002_len(xn,yn,zn))            \
  389.         ((yp)-(t/2)*(yn)/ RSPv0002_len(xn,yn,zn))            \
  390.         ((zp)-(t/2)*(zn)/ RSPv0002_len(xn,yn,zn))            \
  391.     disc ((r)-(t/2))                        \
  392.         ((xp)+(t/2)*(xn)/ RSPv0002_len(xn,yn,zn))            \
  393.         ((yp)+(t/2)*(yn)/ RSPv0002_len(xn,yn,zn))            \
  394.         ((zp)+(t/2)*(zn)/ RSPv0002_len(xn,yn,zn))            \
  395.         (xn) (yn) (zn)                        \
  396.     disc ((r)-(t/2))                        \
  397.         ((xp)-(t/2)*(xn)/ RSPv0002_len(xn,yn,zn))            \
  398.         ((yp)-(t/2)*(yn)/ RSPv0002_len(xn,yn,zn))            \
  399.         ((zp)-(t/2)*(zn)/ RSPv0002_len(xn,yn,zn))            \
  400.         (-xn) (-yn) (-zn)                        \
  401.     end                                    \
  402.     torus ((r)-(t/2)) (t/2)  (xp) (yp) (zp)  (xn) (yn) (zn)        \
  403. end
  404.  
  405.  
  406. #endif /* ifndef RSHF_ROUNDED */
  407.